`
https://leetcode.cn/problems/keys-and-rooms/
`

/**
 * @param {number[][]} rooms
 * @return {boolean}
 */
var canVisitAllRooms = function (rooms) {
  const n = rooms.length
  // 当前上锁的房间数量
  let lockRoom = n
  // 记录当前房间是否打开
  const isOpen = new Array(n).fill(false)
  // 第一个房间是默认打开的
  isOpen[0] = true
  lockRoom--

  const q = [rooms[0]]
  while (q.length) {
    const cur = q.shift()
    // 把房间里的每一把钥匙拿出来
    for (const key of cur) {
      // 如果钥匙对应的房间还没打开，打开后把里面的钥匙放进队列
      if (!isOpen[key]) {
        isOpen[key] = true
        lockRoom--
        q.push(rooms[key])
      }
    }
  }

  // 把所有能打开的房间都打开后，看看是否还有上锁的房间
  return lockRoom === 0
};